package com;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class 正则测试 {
    public void one(){
        String s = "我要操妹子";
        String pattern = ".*妹子.*";
        boolean matches = Pattern.matches(pattern, s);
        System.out.println("是否包含妹子:"+matches);

    }

    /**
     * 捕获
     */
    public void two(){


        // 按指定模式在字符串查找
        String line = "This order was placed for QT3000! OK?";
        String pattern = "(\\D*)(\\d+)(.*)";

        // 创建 Pattern 对象
        Pattern r = Pattern.compile(pattern);

        // 现在创建 matcher 对象
        Matcher m = r.matcher(line);
        if (m.find( )) {
            System.out.println(m.group());
            System.out.println("Found value: " + m.group(0) );
            System.out.println("Found value: " + m.group(1) );
            System.out.println("Found value: " + m.group(2) );
            System.out.println("Found value: " + m.group(3) );
        } else {
            System.out.println("NO MATCH");
        }
    }




    /**
     * 替换
     */
    public void five(){
         String REGEX = "dog";
         String INPUT = "The dog says meow. " +
                "All dogs say meow.";
         String REPLACE = "cat";
        Pattern p = Pattern.compile(REGEX);
        // get a matcher object
        Matcher m = p.matcher(INPUT);
        INPUT = m.replaceAll(REPLACE);
        System.out.println(INPUT);
    }

    /**
     * 替换
     */
    public void six(){
         String REGEX = "a*b";
         String INPUT = "aabfooaabfooabfoobkkk";
         String REPLACE = "-";
        Pattern p = Pattern.compile(REGEX);
        // 获取 matcher 对象
        Matcher m = p.matcher(INPUT);
        StringBuffer sb = new StringBuffer();
        while(m.find()){
            m.appendReplacement(sb,REPLACE);
        }
        m.appendTail(sb);
        System.out.println(sb.toString());
    }

    /**
     * 匹配
     * @throws Exception
     */
    public void seven(){
        String str = "<![CDATA[成人票]]>";
        String pattern = "(<!\\[CDATA\\[)(.*)(]]>)";
        Pattern compile = Pattern.compile(pattern);
        Matcher matcher = compile.matcher(str);


        if(matcher.find()) {
            System.out.println(matcher.group(2));
            for (int i = 1; i < matcher.groupCount() + 1; i++) {

                System.out.println( i+":"+     matcher.group(i));
            }

        }

    }
    public void eight(){
        String str = "<![CDATA[1.同一手机号和身份证码每天仅可订购5张\\r\\n2.为保证顺利入园，请务必携带购票时登记的身份证原件；购票时登记的身份证持有人本人必须在场，且需与同一订单的所有同行游客一同入园；\\r\\n3.门票过期未使用，顾客可在60个工作日的退款有效期内申请退款，退款可直接在“我的订单”中直接点击“申请退票”，1个订单多张票，不支持部分退\\r\\n4.所有网站同一手机号和身份证码每天仅可订购5张，如已经预订2张欢乐谷门票，只可再预订3张玛雅水公园门票 \\r\\n5.如您填写身份证最后一位为x,请小写，便于系统识别，谢谢\\r\\n6.若无法出示身份证，请前往现场景区客服处进行身份核对后，方可由我园客服人员带领入园。\\r\\n7、根据相关规定，园内所有游乐设施将定期进行日检、周检、月检及年度检修，相关检修工作可能会造成部分游乐项目暂停或延迟开放，具体以公园现场公告为准；\\r\\n8、由于天气等原因，可能会在没有预先通知的情况下变更、延迟或取消项目运行及表演，具体以公园现场公告为准；\\n费用不包含：餐饮\\n]]>";
        String str2 = "1.同一手机号和身份证码每天仅可订购5张\\r\\n";
        String pattern = "(<!\\[CDATA\\[)(.*)(]]>)";
        String pattern2 = "(.*)(\\s||\\S*)";
        Pattern compile = Pattern.compile(pattern2);
        Matcher matcher = compile.matcher(str2);
        if(matcher.find()){
            for(int i = 1;i<matcher.groupCount()+1;i++){
                System.out.println( i+":"+     matcher.group(i));
            }
        }
    }
    public  void nine(){
        String str =
                "<![CDATA[1.同一手机号和身份证码每天仅可订购5张\\r\\n2.为保证顺利入园，请务必携带购票时登记的身份证原件；购票时登记的身份证持有人本人必须在场，且需与同一订单的所有同行游客一同入园；\\r\\n3.门票过期未使用，顾客可在60个工作日的退款有效期内申请退款，退款可直接在“我的订单”中直接点击“申请退票”，1个订单多张票，不支持部分退\\r\\n4.所有网站同一手机号和身份证码每天仅可订购5张，如已经预订2张欢乐谷门票，只可再预订3张玛雅水公园门票 \\r\\n5.如您填写身份证最后一位为x,请小写，便于系统识别，谢谢\\r\\n6.若无法出示身份证，请前往现场景区客服处进行身份核对后，方可由我园客服人员带领入园。\\r\\n7、根据相关规定，园内所有游乐设施将定期进行日检、周检、月检及年度检修，相关检修工作可能会造成部分游乐项目暂停或延迟开放，具体以公园现场公告为准；\\r\\n8、由于天气等原因，可能会在没有预先通知的情况下变更、延迟或取消项目运行及表演，具体以公园现场公告为准；\\n费用不包含：餐饮\\n]]>";
        String pattern = "CDATA";
        Pattern compile = Pattern.compile(pattern);
        Matcher m = compile.matcher(str);

        StringBuffer sb = new StringBuffer();
        while(m.find()){
            m.appendReplacement(sb,"");
        }
        m.appendTail(sb);
        System.out.println(sb.toString());
    }

    /**
     * CDATA标签的转换
     * @return
     */
    public  String CdataReplace(){
        String string =     "<![CDATA[1.同一手机号和身份证码每天仅可订购5张\\r\\n2.为保证顺利入园，请务必携带购票时登记的身份证原件；购票时登记的身份证持有人本人必须在场，且需与同一订单的所有同行游客一同入园；\\r\\n3.门票过期未使用，顾客可在60个工作日的退款有效期内申请退款，退款可直接在“我的订单”中直接点击“申请退票”，1个订单多张票，不支持部分退\\r\\n4.所有网站同一手机号和身份证码每天仅可订购5张，如已经预订2张欢乐谷门票，只可再预订3张玛雅水公园门票 \\r\\n5.如您填写身份证最后一位为x,请小写，便于系统识别，谢谢\\r\\n6.若无法出示身份证，请前往现场景区客服处进行身份核对后，方可由我园客服人员带领入园。\\r\\n7、根据相关规定，园内所有游乐设施将定期进行日检、周检、月检及年度检修，相关检修工作可能会造成部分游乐项目暂停或延迟开放，具体以公园现场公告为准；\\r\\n8、由于天气等原因，可能会在没有预先通知的情况下变更、延迟或取消项目运行及表演，具体以公园现场公告为准；\\n费用不包含：餐饮\\n]]>";

        String one = CdataReplace(string,"CDATA","");
        String two = CdataReplace(one,"\\<\\!\\[\\[","");
        String three = CdataReplace(two,"]]>","");
        String four = CdataReplace(three,"r","");
        String five = CdataReplace(four,"n","<br/>");
        String six = CdataReplace(five,"\\\\","");
        System.out.println(six);
        return five;
    }

    /**
     * 替换
     * @param string
     * @return
     */
    public  String CdataReplace(String string,String pattern,String replace){

        Pattern compile = Pattern.compile(pattern);
        Matcher matcher = compile.matcher(string);
        StringBuffer buffer = new StringBuffer();
        while (matcher.find()){
            matcher.appendReplacement(buffer,replace);
        }
        matcher.appendTail(buffer);

        return buffer.toString();
    }

    /**
     * 异常的json转换
     */
    public void xueshan(){
        String body = "{\"{\\\"head\\\":{\\\"loginAccount\\\":\\\"htwz001\\\",\\\"sign\\\":\\\"c5db5b852ea61f2f82480f99236791f0\\\"},\\\"body\\\":{\\\"orderDetail\\\":{\\\"orderSheetId\\\":{\\\"orderNo\\\":\\\"htfx202009211527527314250628\\\"},\\\"orderDetailVerifyList\\\":[{\\\"verifyNo\\\":\\\"htwz401c986e-aee8-4dc3-a567-df9211585b91\\\"}],\\\"noticeType\\\":\\\"2\\\"}}}\":\"\"}";
        String pattern  = "(\\{\")(.*)(\":\"\")";
        Pattern compile = Pattern.compile(pattern);
        Matcher matcher = compile.matcher(body);
        String str = "";
        if(matcher.find()){
            for(int i = 1;i<matcher.groupCount()+1;i++){
                System.out.println(matcher.group(i));
            }
            str = matcher.group(2);
        }
        String s = CdataReplace(str, "\\\\", "");
        System.out.println(s);
    }



    public static void main(String[] args) throws Exception {
        正则测试 rege = new 正则测试();
//        rege.one();
//        rege.two();
//        rege.three();
//        rege.four();
//        rege.five();
//        rege.six();
//        rege.seven();
//        rege.eight();
//rege.nine();
//        rege.CdataReplace();
        rege.xueshan();
    }

}
